﻿Public Class Maritimos
    Private oFact As New CFacturacion
    Private oMaestra As New CMaestras
    Private idConsolidado As Integer
    Private dtConsolidado As New DataTable
    Public origenSeleccionado As String = "0"
    Public destinoSeleccionado As String = "0"
    Public agenteSeleccionado As String = "0"


    Private Sub Maritimos_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Oculta el panel de los filtros
        Me.panelFiltros.Size = New Size(Me.panelFiltros.Width, 15)
        Me.dateFecha.Value = Date.Today

        'Trae info de la grilla de los consolidados y llena los combos
        Me.CargarGrilla()        
        Me.CargarAgente()
        Me.CargarCiudades()
    End Sub

    Private Sub btnOcultarMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOcultarMenu.Click
        'Muestra/Oculta el panel de los filtros
        If Me.panelFiltros.Size.Height <= 30 Then
            Me.panelFiltros.Size = New Size(Me.panelFiltros.Width, 169)
            Me.btnOcultarMenu.Image = My.Resources.arriba
        Else
            Me.panelFiltros.Size = New Size(Me.panelFiltros.Width, 15)
            Me.btnOcultarMenu.Image = My.Resources.abajo
        End If
    End Sub

    Private Sub CargarGrilla()
        Try
            'Si la tabla no se ha llenado trae los registros
            If (Me.dtConsolidado.Rows.Count = 0) Then
                Dim ds As New DataSet
                ds = Me.oFact.GetConsolidados()
                Me.dtConsolidado = ds.Tables(0).Copy
            End If

            'Si el usuario no puede ver aereos o maritimos se eliminan de la tabla
            For i As Integer = Me.dtConsolidado.Rows.Count - 1 To 0 Step -1
                If (Me.dtConsolidado.Rows(i)("TRANSPORTE").ToString.ToUpper = "AEREO") Or (Me.dtConsolidado.Rows(i)("TRANSPORTE").ToString.ToUpper = "TERCEROS") Or (Me.dtConsolidado.Rows(i)("TRANSPORTE").ToString.ToUpper = "TERCEROSMARITIMO") Then
                    Me.dtConsolidado.Rows.RemoveAt(i)
                End If
            Next
            Me.dtConsolidado.AcceptChanges()

            If (Me.dtConsolidado.Rows.Count > 0) Then
                Me.grdConsolidado.DataSource = Nothing
                Me.grdConsolidado.Columns.Clear()
                Me.grdConsolidado.DataSource = Me.dtConsolidado

                Dim iconoEditar As New DataGridViewImageColumn()
                iconoEditar.ValuesAreIcons = False
                iconoEditar.Image = My.Resources.editar
                iconoEditar.HeaderText = "EDITAR"
                iconoEditar.Name = "Editar"
                Me.grdConsolidado.Columns.Add(iconoEditar)

                Dim iconoEliminar As New DataGridViewImageColumn()
                iconoEliminar.ValuesAreIcons = False
                iconoEliminar.Image = My.Resources.eliminar
                iconoEliminar.HeaderText = "ELIMINAR"
                iconoEliminar.Name = "Eliminar"
                Me.grdConsolidado.Columns.Add(iconoEliminar)

                Dim iconoHijas As New DataGridViewImageColumn()
                iconoHijas.ValuesAreIcons = False
                iconoHijas.Image = My.Resources.hijas
                iconoHijas.HeaderText = "HIJAS"
                iconoHijas.Name = "Hijas"
                Me.grdConsolidado.Columns.Add(iconoHijas)

                Me.grdConsolidado.Columns("ID").Visible = False
                Me.grdConsolidado.Columns("EDITAR").Width = 50
                Me.grdConsolidado.Columns("ELIMINAR").Width = 65
                Me.grdConsolidado.Columns("HIJAS").Width = 50
                Me.grdConsolidado.Columns("MAWB").HeaderText = "MBL"
            Else
                Me.grdConsolidado.DataSource = Nothing
                Me.grdConsolidado.Columns.Clear()
                MessageBox.Show("No se encontraron consolidados", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los consolidados: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub



    Public Sub CargarAgente()
        Try
            Dim ds As New DataSet
            ds = Me.oFact.GetListadoAgentes()
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.drpAgenteBuscar.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Seleccione...")
                Me.drpAgenteBuscar.ValueMember = ds.Tables(0).Columns(0).ColumnName
                Me.drpAgenteBuscar.DisplayMember = ds.Tables(0).Columns(1).ColumnName

                Dim dt As DataTable = ds.Tables(0).Copy

                Me.drpAgente.DataSource = dt
                Me.drpAgente.ValueMember = dt.Columns(0).ColumnName
                Me.drpAgente.DisplayMember = dt.Columns(1).ColumnName

                If (Me.agenteSeleccionado <> "0") Then
                    Me.drpAgente.SelectedValue = Me.agenteSeleccionado
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al cargar los agentes: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Public Sub CargarCiudades()
        Dim ds As New DataSet
        ds = Me.oMaestra.GetListadoCiudades()
        If (ds.Tables(0).Rows.Count > 0) Then
            Dim dt1 As DataTable = ds.Tables(0).Copy
            Dim dt2 As DataTable = ds.Tables(0).Copy
            Dim dt3 As DataTable = ds.Tables(0).Copy

            Me.drpOrigenBuscar.DataSource = CUtil.AgregarRegistro(ds.Tables(0), "Todas...")
            Me.drpOrigenBuscar.ValueMember = ds.Tables(0).Columns(0).ColumnName
            Me.drpOrigenBuscar.DisplayMember = ds.Tables(0).Columns(1).ColumnName

            Me.drpDestinoBuscar.DataSource = CUtil.AgregarRegistro(dt1, "Todas...")
            Me.drpDestinoBuscar.ValueMember = dt1.Columns(0).ColumnName
            Me.drpDestinoBuscar.DisplayMember = dt1.Columns(1).ColumnName

            Me.drpOrigen.DataSource = CUtil.AgregarRegistro(dt2, "Seleccionar...")
            Me.drpOrigen.ValueMember = dt2.Columns(0).ColumnName
            Me.drpOrigen.DisplayMember = dt2.Columns(1).ColumnName

            Me.drpDestino.DataSource = CUtil.AgregarRegistro(dt3, "Seleccionar...")
            Me.drpDestino.ValueMember = dt3.Columns(0).ColumnName
            Me.drpDestino.DisplayMember = dt3.Columns(1).ColumnName

            If (Me.origenSeleccionado <> "0") Then
                Me.drpOrigen.SelectedValue = Me.origenSeleccionado
            End If
            If (Me.destinoSeleccionado <> "0") Then
                Me.drpDestino.SelectedValue = Me.destinoSeleccionado
            End If
        End If
    End Sub

    Private Sub btnCrearOrigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearOrigen.Click
        'Abre el formulario de la maestra de las ciudades
        My.Forms.Ciudades.Show()
    End Sub

    Private Sub btnCrearDestino_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearDestino.Click
        'Abre el formulario de la maestra de las ciudades
        My.Forms.Ciudades.Show()
    End Sub

    Private Sub btnCrearAgente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCrearAgente.Click
        'Abre el formulario de la maestra de los agentes
        My.Forms.Agentes.Show()
    End Sub


#Region "Eventos de la grilla"

    Private Sub grdConsolidado_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdConsolidado.CellDoubleClick
        '*** Permite editar o eliminar
        'Se obtiene la info del registro
        Dim id As Integer = Me.grdConsolidado.Rows(e.RowIndex).Cells("ID").Value
        Dim hbl As String = Me.grdConsolidado.Rows(e.RowIndex).Cells("MAWB").Value

        Select Case Me.grdConsolidado.Columns(e.ColumnIndex).Name
            Case "Editar"
                Me.EditarConsolidado(id)
            Case "Eliminar"
                Me.EliminarConsolidado(id)
            Case "Hijas"
                My.Forms.HijasMaritimo.idConsolidado = id
                My.Forms.HijasMaritimo.MdiParent = My.Forms.Principal
                My.Forms.HijasMaritimo.Show()
        End Select
    End Sub

    Private Sub grdConsolidado_CellMouseEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdConsolidado.CellMouseEnter
        '*** Coloca la manito cuando el mouse entra en las celdas de editar y eliminar
        If (Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Eliminar" Or Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Hijas") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

    Private Sub grdConsolidado_CellMouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles grdConsolidado.CellMouseMove
        If (Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Editar" Or Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Eliminar" Or Me.grdConsolidado.Columns(e.ColumnIndex).Name = "Hijas") Then
            Cursor = Cursors.Hand
        Else
            Cursor = Cursors.Default
        End If
    End Sub

#End Region

    Private Sub EditarConsolidado(ByVal id As Integer)
        Me.Limpiar()
        Me.idConsolidado = id

        Me.TraerDatosConsolidado(id)
    End Sub

    Private Sub EliminarConsolidado(ByVal id As Integer)
        Try
            If (MessageBox.Show("¿Realmente desea eliminar este consolidado?", "Eliminar consolidado", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes) Then
                Cursor = Cursors.WaitCursor
                Me.oFact.EliminarConsolidado(id)
                Cursor = Cursors.Default
                MessageBox.Show("El consolidado ha sido eliminado", "Consolidado eliminado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("NO se eliminó el consolidado: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try

        Me.CargarGrilla()
    End Sub

    Private Sub Limpiar()
        Me.idConsolidado = 0
        Me.txtNumero.Text = ""
        Me.txtMAWB.Text = ""
        Me.txtPeso.Text = ""
        Me.rbtnImportacion.Checked = True
        Me.rbtnExportacion.Checked = False
        Me.rbtnMaritimo.Checked = True
        Me.rbtnLibra.Checked = True
        Me.rbtnKilo.Checked = False
        Me.drpOrigen.SelectedValue = "0"
        Me.drpDestino.SelectedValue = "0"
        Me.drpAgente.SelectedValue = "0"
        Me.origenSeleccionado = "0"
        Me.destinoSeleccionado = "0"
        Me.agenteSeleccionado = "0"
    End Sub

    Private Sub TraerDatosConsolidado(ByVal id As Integer)
        Try
            Me.TabControl1.SelectedIndex = 1

            'Trae los datos del consolidado seleccionado
            Dim ds As New DataSet
            ds = Me.oFact.GetConsolidadoById(id)
            If (ds.Tables(0).Rows.Count > 0) Then
                Me.idConsolidado = ds.Tables(0).Rows(0)("ID")
                Me.txtNumero.Text = ds.Tables(0).Rows(0)("NUMERO")
                Me.drpOrigen.SelectedValue = ds.Tables(0).Rows(0)("IDORIGEN")
                Me.drpDestino.SelectedValue = ds.Tables(0).Rows(0)("IDDESTINO")
                Me.drpAgente.SelectedValue = ds.Tables(0).Rows(0)("IDAGENTE")
                Me.origenSeleccionado = ds.Tables(0).Rows(0)("IDORIGEN")
                Me.destinoSeleccionado = ds.Tables(0).Rows(0)("IDDESTINO")
                Me.agenteSeleccionado = ds.Tables(0).Rows(0)("IDAGENTE")
                Me.txtMAWB.Text = ds.Tables(0).Rows(0)("MAWB")
                Me.dateFecha.Value = ds.Tables(0).Rows(0)("FECHA")
                Me.txtPeso.Text = ds.Tables(0).Rows(0)("PESO")
                If (ds.Tables(0).Rows(0)("TIPO").ToString = "Importacion") Then
                    Me.rbtnImportacion.Checked = True
                    Me.rbtnExportacion.Checked = False
                Else
                    Me.rbtnImportacion.Checked = False
                    Me.rbtnExportacion.Checked = True
                End If
                Me.rbtnMaritimo.Checked = True
                If (ds.Tables(0).Rows(0)("UNIDAD").ToString = "Kilo") Then
                    Me.rbtnKilo.Checked = True
                    Me.rbtnLibra.Checked = False
                Else
                    Me.rbtnKilo.Checked = False
                    Me.rbtnLibra.Checked = True
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Ocurrió un error al traer la información del consolidado: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Limpiar()
        Me.TabControl1.SelectedIndex = 0
    End Sub

    Private Sub btnListo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListo.Click
        '*** Guarda en la bd la info que se esta editando o creando
        If (Me.Validar()) Then
            Try
                Cursor = Cursors.WaitCursor

                Dim tipo As String = ""
                Dim transporte As String = ""
                Dim unidad As String = ""
                Dim fecha As String = CUtil.ConvertirFecha(Me.dateFecha.Value)

                If (Me.rbtnImportacion.Checked) Then
                    tipo = "Importacion"
                Else
                    tipo = "Exportacion"
                End If
                transporte = "Maritimo"
                If (Me.rbtnKilo.Checked) Then
                    unidad = "Kilo"
                Else
                    unidad = "Libra"
                End If

                If (Me.idConsolidado = 0) Then
                    Me.origenSeleccionado = Me.drpOrigen.SelectedValue
                    Me.destinoSeleccionado = Me.drpDestino.SelectedValue
                    Me.agenteSeleccionado = Me.drpAgente.SelectedValue
                End If

                'Si se esta creando consolidado nuevo, el sistema le asigna numero
                Dim numero As Integer = 0
                If (Me.idConsolidado > 0) Then
                    numero = Me.txtNumero.Text
                Else
                    numero = Me.oFact.GetSiguienteNumeroConsolidado("MARITIMO") + 1
                End If

                'Se valida que el numero se repita
                Dim result As String = ""
                If (Me.oFact.ValidarNumeroConsolidado(Me.idConsolidado, numero, "MARITIMO", False)) Then
                    result = Me.oFact.ActualizarConsolidado(Me.idConsolidado, CInt(Me.origenSeleccionado), CInt(Me.destinoSeleccionado), CInt(Me.agenteSeleccionado), Trim(Me.txtMAWB.Text), CDbl(Me.txtPeso.Text), tipo, transporte, unidad, fecha, numero)
                Else
                    result = "No se modificó el consolidado porque el número ya existe en otro consolidado"
                End If

                Cursor = Cursors.Default
                MessageBox.Show(result, "Consolidado", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Catch ex As Exception
                Cursor = Cursors.Default
                MessageBox.Show("Ocurrió un error al guardar los datos del consolidado: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try

            Me.Limpiar()
            Me.dtConsolidado.Rows.Clear()
            Me.CargarGrilla()
        End If
    End Sub

    Private Function Validar() As Boolean
        Dim mensaje As String = ""

        If (Me.drpOrigen.SelectedValue = "0") Then
            mensaje += "- Debe seleccionar el origen" & Chr(13)
        End If
        If (Me.drpDestino.SelectedValue = "0") Then
            mensaje += "- Debe seleccionar el destino" & Chr(13)
        End If
        If (Me.drpAgente.SelectedValue = "0") Then
            mensaje += "- Debe seleccionar el agente" & Chr(13)
        End If
        If (Trim(Me.txtMAWB.Text) = "") Then
            mensaje += "- Debe escribir el MBL" & Chr(13)        
        End If
        If (Trim(Me.txtPeso.Text) = "") Then
            mensaje += "- Debe escribir el peso" & Chr(13)
        Else
            If Not IsNumeric(Trim(Me.txtPeso.Text)) Then
                mensaje += "- El peso debe ser un valor numérico" & Chr(13)
            End If
        End If

        'Si los 2 radio button de transporte estan deshabilitados no se peude guardar el consolidado
        If (Not (My.Forms.Principal.Aereo)) And (Not (My.Forms.Principal.Maritimo)) Then
            mensaje = "No tiene permisos para guardar consolidados aéreos ni marítimos"
        End If

        'Si se esta editando el numero no puede quedar en blanco
        If (Me.idConsolidado > 0) Then
            If (Trim(Me.txtNumero.Text) = "") Then
                mensaje += "- El número del consolidado no puede quedar vacío" & Chr(13)
            End If
        End If


        If (mensaje.Length > 0) Then
            MessageBox.Show(mensaje, "Datos incompletos", MessageBoxButtons.OK, MessageBoxIcon.Information)
            Return False
        Else
            Return True
        End If
    End Function

    Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click
        Me.Limpiar()
    End Sub

    Private Sub btnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
        Try
            Cursor = Cursors.WaitCursor
            Dim numero As Integer = 0
            Dim desde As String = ""
            Dim hasta As String = ""
            If (Trim(Me.txtNumeroBuscar.Text).Length > 0) Then
                If IsNumeric(Me.txtNumeroBuscar.Text) Then
                    numero = Me.txtNumeroBuscar.Text
                End If
            End If
            Dim mes As String = ""
            Dim dia As String = ""
            If (Me.dateDesdeBuscar.Checked) Then
                mes = Me.dateDesdeBuscar.Value.Month
                dia = Me.dateDesdeBuscar.Value.Day
                If (mes.Length = 1) Then
                    mes = "0" & mes
                End If
                If (dia.Length = 1) Then
                    dia = "0" & dia
                End If
                desde = Me.dateDesdeBuscar.Value.Year & mes & dia
            End If
            If (Me.dateHastaBuscar.Checked) Then
                mes = Me.dateHastaBuscar.Value.Month
                dia = Me.dateHastaBuscar.Value.Day
                If (mes.Length = 1) Then
                    mes = "0" & mes
                End If
                If (dia.Length = 1) Then
                    dia = "0" & dia
                End If
                hasta = Me.dateHastaBuscar.Value.Year & mes & dia
            End If

            Dim ds As New DataSet
            ds = Me.oFact.BuscarConsolidado(numero, CInt(Me.drpAgenteBuscar.SelectedValue), Trim(Me.txtMBLBuscar.Text), CInt(Me.drpOrigenBuscar.SelectedValue), CInt(Me.drpDestinoBuscar.SelectedValue), desde, hasta)
            Me.dtConsolidado = ds.Tables(0).Copy
            Me.CargarGrilla()

            Cursor = Cursors.Default
        Catch ex As Exception
            Cursor = Cursors.Default
            MessageBox.Show("Ocurrió un error al buscar los consolidados: " & ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub

    Private Sub btnHijas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnHijas.Click
        If (Me.idConsolidado > 0) Then
            My.Forms.HijasMaritimo.idConsolidado = Me.idConsolidado
            My.Forms.HijasMaritimo.MdiParent = My.Forms.Principal
            My.Forms.HijasMaritimo.Show()
        Else
            MessageBox.Show("Debe guardar primero el consolidado", "Guardar consolidado", MessageBoxButtons.OK, MessageBoxIcon.Information)
        End If
    End Sub

End Class